"""
题1  文件系统遍历编程题
【题目要求】
编写一个Python程序，实现以下功能：
递归遍历目录：输入一个目录路径，递归遍历该目录下的所有文件（不包括目录）
输出文件信息：对于每个文件，输出以下信息：
	文件的绝对路径
	文件大小（字节）
	文件最后修改时间（格式：YYYY-MM-DD HH:MM:SS）
简洁输出：每行输出一个文件的信息，字段用逗号分隔
错误处理：处理目录不存在、权限不足等异常情况
【输出格式要求】
绝对路径,文件大小(字节),修改时间
绝对路径,文件大小(字节),修改时间
【示例输出】
c://user/project/main.py,4096,2023-10-15 14:30:25
c://user/project/utils.py,2048,2023-10-14 09:15:40
c://user/project/data/config.json,1024,2023-10-13 16:20:18
【附加要求】
使用 pathlib 模块进行路径操作
使用递归方法实现遍历
按文件路径的字母顺序排序输出
排除隐藏文件（以点开头的文件）
"""
from pathlib import Path
from datetime import datetime


def traverse_directory(directory_path):

    try:
        # 创建Path对象
        path = Path(directory_path)

        # 检查目录是否存在
        if not path.exists():
            print(f"错误：目录 '{directory_path}' 不存在")
            return

        # 检查是否是目录
        if not path.is_dir():
            print(f"错误：'{directory_path}' 不是目录")
            return

        # 收集所有文件信息
        file_list = []
        _collect_files(path, file_list)

        # 按文件路径的字母顺序排序
        file_list.sort(key=lambda x: str(x['path']))

        # 输出文件信息
        for file_info in file_list:
            print(f"{file_info['path']},{file_info['size']},{file_info['mtime']}")

    except PermissionError:
        print(f"错误：没有权限访问目录 '{directory_path}'")
    except Exception as e:
        print(f"发生错误：{e}")


def _collect_files(current_path, file_list):

    try:
        # 遍历当前目录下的所有项目
        for item in current_path.iterdir():
            # 跳过隐藏文件（以点开头的文件）
            if item.name.startswith('.'):
                continue

            if item.is_file():
                # 获取文件信息
                file_size = item.stat().st_size
                mtime_timestamp = item.stat().st_mtime
                mtime_formatted = datetime.fromtimestamp(mtime_timestamp).strftime('%Y-%m-%d %H:%M:%S')

                # 添加到文件列表
                file_list.append({
                    'path': item.absolute(),
                    'size': file_size,
                    'mtime': mtime_formatted
                })

            elif item.is_dir():
                # 递归遍历子目录
                _collect_files(item, file_list)

    except PermissionError:
        # 跳过没有权限的目录
        pass


def main():
    # 获取用户输入的目录路径
    directory_path = input("请输入要遍历的目录路径: ").strip()

    # 遍历目录并输出文件信息
    traverse_directory(directory_path)


if __name__ == "__main__":
    main()

"""
题2 文件信息统计工具
编写一个程序，实现以下功能：
1.	使用pathlib模块遍历指定目录下的所有.txt文件
2.	对于每个.txt文件，统计以下信息：
o	文件大小（字节）
o	行数
o	单词数（以空格分隔）
o	字符数
3.	将统计结果写入到CSV文件中，包含文件名和各项统计信息
4.	使用函数模块化设计，提高代码可读性和复用性
示例输出文件内容:
filename,size_bytes,line_count,word_count,char_count
file1.txt,1024,25,180,950
file2.txt,2048,42,320,1980

"""
from pathlib import Path

def fun1(path):
    word_num = []
    bytes_size = []
    lines = []
    items = []
    for item in Path(path).rglob('*.py'):
        items.append(item)
        bytes_size.append(item.stat().st_size)  # 每个文件的字节大小

        line = 0

        with open(item, 'r', encoding='utf-8') as f:
            while True:
                aa = f.readline()
                if aa == '': break
                line = line + 1
            lines.append(line)

        num = 0
        with open(item, 'r', encoding='utf-8') as f:
            aa = f.read()
            words = aa.split(' ')
            for word in words:
                num += 1
            word_num.append(num)

    f1 = Path('data.csv')
    with open('data.csv', 'a', encoding='utf-8') as f:
        f.write('文件名,单词数,字节数,行数\n')

    for item in zip(items, word_num, bytes_size, lines):
        with open('data.csv', 'a', encoding='utf-8') as f:
            f.write(f'{item[0]},{item[1]},{item[2]},{item[3]}\n')

fun1('D:\\2508_A\\month01\\day13')


